import typeOf from "./typeOf";
import empty from "./empty";

/**
 * 格式化金额
 * @param number
 * @param options { number | object }
 * @returns { string }
 */

const formatMoney = (number, options = { decimals: 2 }) => {
  if(empty(number) || typeOf(number, 'boolean') || isNaN(number)) {
    return number // 不处理无效数据
  }

  // 第二参特殊处理 小数点
  if(typeOf(options, 'number')) {
    options = { decimals : options }
  }

  const { decimals, decPoint = '.', thousand = ',' } = options;
  const prefix = number < 0 ? '-' : '';
  const intStr = String(parseInt(number = Math.abs(number).toFixed(decimals)));
  let len = intStr.length;

  // 千分位个数
  len = len > 3 ? len % 3 : 0;

  // 第一处千分位处理
  const firstThousand = len ? intStr.substr(0, len) + thousand : "";

  // 其他千分位处理
  const secThousand = intStr.substr(len).replace(/(\d{3})(?=\d)/g, "$1" + thousand);
  
  // 小数处理
  const decimalsStr = decimals ? decPoint + Math.abs(number - intStr).toFixed(decimals).slice(2) : ''

  // 拼接完整金额
  return prefix + firstThousand + secThousand + decimalsStr
}

export default formatMoney;